package controller

import (
	"github.com/gin-gonic/gin"
	"gorm.io/gorm"
	"log/slog"
	"net/http"
	"vitepress-serve/internal/common"
	"vitepress-serve/internal/common/hgin"
	"vitepress-serve/internal/controller/meb"
	"vitepress-serve/internal/model"
)

func Router(engine *gin.Engine) (err error) {
	// 连接数据库
	db, err := common.NewPostgres(common.GetPgDsn())
	if err != nil {
		return
	}
	// 初始化表结构
	autoMigrate(db)

	g := engine.Group("", hgin.MiddlewareLogger, hgin.MiddlewareError)

	//Vitepress 用户端接口
	{
		gt := g.Group("", hgin.MiddlewareCookieJwt)
		ctl := meb.NewController(db)

		// 将同步产品接口移到不需要鉴权的路由组
		hgin.POST(g, "/vpapi/meb/stripe/sync-products", ctl.SyncStripeProducts)
		// 删除重复的 Stripe Webhook 路由

		// 问题可能在这里：
		// 1. 方法是否匹配（GET/POST）
		hgin.GET(g, "/vpapi/meb/weixin-authorize", ctl.WeixinAuthorize)       // 微信授权-前端页面跳转  ，前端生成一个ID，微信自动跳转，非微信生成二维码提示扫码
		hgin.GET(g, meb.PATH_WEIXIN_OAUTH2_CALLBACK, ctl.WeixinOauthCallback) // 微信授权-前端页面回调
		hgin.POST(g, "/vpapi/meb/oauth-polling", ctl.OauthPolling)            // 根据用户标识轮询查token
		hgin.POST(g, "/vpapi/meb/logout", ctl.Logout)                         //退出登录
		hgin.POST(gt, "/vpapi/meb/userinfo", ctl.UserInfo)                    // 用户信息查询，需要token

		//hgin.POST(gt, "/vpapi/meb/order-create", ctl.OrderCrete)       // 下单
		//hgin.POST(g, "/vpapi/meb/order-query", ctl.OrderQuery)         // 订单查询
		//hgin.POST(gt, "/vpapi/meb/order-wxpay", ctl.OrderWxpay)        //微信支付
		hgin.POST(gt, "/vpapi/meb/product-list", ctl.ProductList)      //浏览器：产品列表
		hgin.POST(gt, "/vpapi/meb/product-buy-qry", ctl.ProductBuyQry) //浏览器：轮询查询订单状态
		hgin.GET(g, "/vpapi/meb/product-buy", ctl.ProductBuy)          //手机微信访问： 扫码自动下单，302进入支付页面
		hgin.GET(g, "/vpapi/meb/pay/:order_id", ctl.PayPage)           //手机微信访问：支付页面
		hgin.POST(g, meb.PATH_WXPAY_NOTIFY, ctl.WxpayNotify)           // 微信支付通知

        hgin.POST(g, "/vpapi/meb/google-login", ctl.GoogleLogin)       // Google登录

        // 添加 Stripe 支付相关路由
        hgin.POST(gt, "/vpapi/meb/create-checkout-session", ctl.CreateCheckoutSession) // 创建支付会话
        hgin.POST(gt, "/vpapi/meb/verify-payment", ctl.VerifyPayment)                 // 验证支付状态
        hgin.POST(gt, "/vpapi/meb/subscription/status", ctl.GetSubscriptionStatus)     // 查询订阅状态
        hgin.POST(g, "/vpapi/meb/stripe/webhook", ctl.HandleStripeWebhook)            // Stripe Webhook 回调
        // 静态文件服务器
        engine.GET("/html/*path", ctl.HandlerStaticServer)
    }

	engine.GET("/", func(ctx *gin.Context) {
		ctx.String(http.StatusOK, "index /")
	})
	engine.GET("/favicon.ico", func(ctx *gin.Context) {
		ctx.String(http.StatusOK, "favicon.ico")
	})
	return
}

func autoMigrate(db *gorm.DB) {
	err := db.AutoMigrate(
		model.SysConfig{},
		model.User{},
		model.UserOauth{},
		model.Order{},
		model.Product{},
	)
	if err != nil {
		slog.Error("autoMigrate Error: ", err.Error())
	}
}
